#include <stdio.h>

int main(int argc, char const *argv[])
{
/**
 * 作用：打开文件
 * 参数1： 文件路径 字符串
 * 参数2：打开文件的模式 字符串
 *  r 读模式  文件不存在失败
 *  w 覆盖写模式 文件不存在自动创建
 *  a 追加写模式 文件不存在自动创建
 *  r+ 可读 + 可写，从头开始写一个字符替换一个
 *  w+ 覆盖写 + 可读
 *  a+ 追加写 + 可读
 * 返回值
 *  成功：FILE * 指向结构体FILE的指针
 *  失败：NULL
 * FILE *fopen (const char *__restrict __filename, const char *__restrict __modes)
*/
    //打开文件流
    FILE *file = fopen("io.txt", "w");
    if (file == NULL)
    {
        printf("打开文件失败\n");
    }
    else
    {
        printf("打开文件成功\n");
    }

/**
 * 作用：向文件写入一个字符
 * 参数1：字符的ASCII值
 * 参数2：文件流
 * 返回值：成功：写入字符的ASCII值，失败：EOF
 * 
 * int fputc (int __c, FILE *__stream);
 * */
    int fputc_result = fputc(98, file);
    if (fputc_result == EOF)
    {
        printf("写入一个字符失败\n");
    }
    else
    {
        printf("写入一个字符（%c)成功\n", fputc_result);
    }

/**
 * 作用：向文件写入一个字符串
 * 参数1：要写入的字符串
 * 参数2：文件流
 * 返回值：成功：非负整数(一般是1)，失败：EOF
 * int fputs (const char *__restrict __s, FILE *__restrict __stream)
 * */
    int fputs_result = fputs("\n来尚硅谷学习", file);
    if (fputs_result == EOF)
    {
        printf("写入一个字符串失败\n");
    }
    else
    {
        printf("写入一个字符串成功\n");
    }


/**
 * 作用：向文件写入格式化字符串
 * 参数1：文件流
 * 参数2：带点位的字符串
 * 参数...: n个占位对应的数据
 * 返回值：成功：写入的字符数，失败：EOF
 * int fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
 * */
    int fprintf_result = fprintf(file, "\n%s来尚硅谷学习%s", "小明", "java");
    if (fputs_result == EOF)
    {
        printf("写入一个格式化字符串失败\n");
    }
    else
    {
        printf("写入一个格式化字符串成功\n");
    }


/**
 * 作用：关闭文件流
 * 参数：被关闭的文件流 前面打开的文件流
 * 返回值：成功：为0,失败：为-1（EOF）通常失败会造成系统崩溃
 *
 * int fclose (FILE *__stream);
*/
    //关闭文件流
    int result = fclose(file);
    if (result == EOF)  //-1
    {
        printf("关闭文件失败\n");
    }
    else
    {
        printf("关闭文件成功\n");
    }
     
}